//package com.mtk.launcher.service;
//
//import android.app.Service;
//import android.content.Intent;
//import android.os.IBinder;
//import android.util.Log;
//
//import com.mtk.launcher.bean.ScheduleConfig;
//import com.mtk.launcher.bean.ScheduleType;
//
//import java.io.BufferedReader;
//import java.io.BufferedWriter;
//import java.io.File;
//import java.io.FileReader;
//import java.io.FileWriter;
//import java.io.IOException;
//import java.net.Socket;
//import java.text.SimpleDateFormat;
//import java.util.Calendar;
//import java.util.Timer;
//import java.util.TimerTask;
//import org.json.JSONArray;
//import org.json.JSONException;
//import org.json.JSONObject;
//
//public class PowerControlService extends Service {
//    private static final String TAG = "PowerControlService";
//    private static final String CONFIG_FILE = "/data/power_schedule.json";
//    private static final String RTC_DEVICE = "/sys/class/rtc/rtc0/wakealarm";
//
//    private Timer checkTimer;
//    private ScheduleConfig bootSchedule;
//    private ScheduleConfig shutdownSchedule;
//
//    @Override
//    public void onCreate() {
//        super.onCreate();
//        Log.i(TAG, "Service created");
//
//        // 加载配置
//        loadConfig();
//
//        // 启动定时检查任务
//        startCheckTimer();
//
//        // 注册广播接收器监听网络变化等事件
//        registerReceivers();
//    }
//
//    @Override
//    public int onStartCommand(Intent intent, int flags, int startId) {
//        Log.i(TAG, "Service started");
//        return START_STICKY;
//    }
//
//    @Override
//    public void onDestroy() {
//        super.onDestroy();
//        Log.i(TAG, "Service destroyed");
//
//        // 停止定时检查
//        stopCheckTimer();
//
//        // 保存配置
//        saveConfig();
//
//        // 注销广播接收器
//        unregisterReceivers();
//    }
//
//    @Override
//    public IBinder onBind(Intent intent) {
//        return null;
//    }
//
//    // 启动定时检查任务
//    private void startCheckTimer() {
//        stopCheckTimer();
//
//        checkTimer = new Timer();
//        // 每分钟检查一次
//        checkTimer.scheduleAtFixedRate(new TimerTask() {
//            @Override
//            public void run() {
//                checkAndExecuteTasks();
//            }
//        }, 0, 60 * 1000);
//    }
//
//    // 停止定时检查任务
//    private void stopCheckTimer() {
//        if (checkTimer != null) {
//            checkTimer.cancel();
//            checkTimer = null;
//        }
//    }
//
//    // 注册广播接收器
//    private void registerReceivers() {
//        // 注册网络变化接收器等
//    }
//
//    // 注销广播接收器
//    private void unregisterReceivers() {
//        // 注销网络变化接收器等
//    }
//
//    // 检查并执行定时任务
//    private void checkAndExecuteTasks() {
//        Calendar now = Calendar.getInstance();
//
//        // 检查开机任务
//        if (bootSchedule != null && bootSchedule.isEnabled()) {
//            if (shouldExecute(bootSchedule, now)) {
//                Log.i(TAG, "Executing boot task");
//                scheduleNextBoot();
//            }
//        }
//
//        // 检查关机任务
//        if (shutdownSchedule != null && shutdownSchedule.isEnabled()) {
//            if (shouldExecute(shutdownSchedule, now)) {
//                Log.i(TAG, "Executing shutdown task");
//                executeShutdown();
//            }
//        }
//    }
//
//    // 判断是否应该执行任务
//    private boolean shouldExecute(ScheduleConfig config, Calendar now) {
//        int currentHour = now.get(Calendar.HOUR_OF_DAY);
//        int currentMinute = now.get(Calendar.MINUTE);
//        int currentDayOfWeek = now.get(Calendar.DAY_OF_WEEK);
//
//        // 检查时间是否匹配
//        if (currentHour != config.getHour() || currentMinute != config.getMinute()) {
//            return false;
//        }
//
//        // 检查秒是否为0（确保每分钟只执行一次）
//        if (now.get(Calendar.SECOND) != 0) {
//            return false;
//        }
//
//        // 根据不同类型检查
//        switch (config.getType()) {
//            case DAILY:
//                return true;
//
//            case WEEKLY:
//                // 注意：Calendar中周日是1，周六是7
//                boolean[] weekdays = config.getWeekdays();
//                return weekdays[currentDayOfWeek - 1];
//
//            case NETWORK:
//                return checkNetworkSchedule(config);
//
//            default:
//                return false;
//        }
//    }
//
//    // 检查网络定时设置
//    private boolean checkNetworkSchedule(ScheduleConfig config) {
//        try {
//            // 实际实现中应连接到指定服务器获取时间
//            Log.i(TAG, "Checking network schedule from " +
//                config.getServer() + ":" + config.getPort());
//
//            // 示例：连接到服务器获取时间
//            try (Socket socket = new Socket(config.getServer(), config.getPort())) {
//                // 这里应该从服务器读取时间信息并解析
//                // 简化示例，假设服务器返回"HH:mm"格式的时间字符串
//                // 实际实现需要根据服务器协议调整
//
//                // 如果当前时间与服务器返回时间匹配，则执行任务
//                return true;
//            }
//        } catch (IOException e) {
//            Log.e(TAG, "Network schedule check failed: " + e.getMessage());
//            return false;
//        }
//    }
//
//    // 设置下次开机时间
//    private void scheduleNextBoot() {
//        try {
//            Calendar nextTime = Calendar.getInstance();
//            nextTime.add(Calendar.DAY_OF_YEAR, 1); // 默认明天
//
//            // 设置RTC唤醒时间
//            setRtcWakeupTime(nextTime);
//        } catch (Exception e) {
//            Log.e(TAG, "Failed to schedule next boot: " + e.getMessage());
//        }
//    }
//
//    // 设置RTC唤醒时间
//    private void setRtcWakeupTime(Calendar wakeTime) {
//        try {
//            // 清除现有闹钟
//            writeToFile(RTC_DEVICE, "0");
//
//            // 格式化时间为"YYYY-MM-DD HH:MM:SS"
//            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//            String timeStr = sdf.format(wakeTime.getTime());
//
//            // 设置新的唤醒时间
//            writeToFile(RTC_DEVICE, timeStr);
//
//            Log.i(TAG, "RTC wakeup time set to: " + timeStr);
//        } catch (Exception e) {
//            Log.e(TAG, "Failed to set RTC wakeup time: " + e.getMessage());
//        }
//    }
//
//    // 执行关机
//    private void executeShutdown() {
//        try {
//            // 保存当前配置
//            saveConfig();
//
//            // 执行关机命令
//            Runtime.getRuntime().exec("reboot -p");
//        } catch (IOException e) {
//            Log.e(TAG, "Failed to execute shutdown: " + e.getMessage());
//        }
//    }
//
//    // 加载配置
//    private void loadConfig() {
//        File configFile = new File(CONFIG_FILE);
//
//        if (!configFile.exists()) {
//            Log.i(TAG, "Config file not found, creating default");
//            createDefaultConfig();
//            return;
//        }
//
//        try (BufferedReader reader = new BufferedReader(new FileReader(configFile))) {
//            StringBuilder jsonText = new StringBuilder();
//            String line;
//
//            while ((line = reader.readLine()) != null) {
//                jsonText.append(line);
//            }
//
//            JSONObject configJson = new JSONObject(jsonText.toString());
//
//            // 加载开机配置
//            if (configJson.has("boot")) {
//                JSONObject bootJson = configJson.getJSONObject("boot");
//                bootSchedule = parseScheduleConfig(bootJson);
//            }
//
//            // 加载关机配置
//            if (configJson.has("shutdown")) {
//                JSONObject shutdownJson = configJson.getJSONObject("shutdown");
//                shutdownSchedule = parseScheduleConfig(shutdownJson);
//            }
//
//            Log.i(TAG, "Config loaded successfully");
//        } catch (IOException | JSONException e) {
//            Log.e(TAG, "Failed to load config: " + e.getMessage());
//            createDefaultConfig();
//        }
//    }
//
//    // 解析定时配置
//    private ScheduleConfig parseScheduleConfig(JSONObject json) throws JSONException {
//        ScheduleConfig config = new ScheduleConfig();
//
//        config.setEnabled(json.getBoolean("enabled"));
//        config.setHour(json.getInt("hour"));
//        config.setMinute(json.getInt("minute"));
//        config.setType(ScheduleType.valueOf(json.getString("type")));
//
//        if (config.getType() == ScheduleType.WEEKLY && json.has("weekdays")) {
//            JSONArray weekdaysArray = json.getJSONArray("weekdays");
//            boolean[] weekdays = new boolean[7];
//
//            for (int i = 0; i < 7 && i < weekdaysArray.length(); i++) {
//                weekdays[i] = weekdaysArray.getBoolean(i);
//            }
//
//            config.setWeekdays(weekdays);
//        } else if (config.getType() == ScheduleType.NETWORK && json.has("server")) {
//            config.setServer(json.getString("server"));
//            config.setPort(json.getInt("port"));
//        }
//
//        return config;
//    }
//
//    // 创建默认配置
//    private void createDefaultConfig() {
//        bootSchedule = new ScheduleConfig();
//        bootSchedule.setEnabled(false);
//        bootSchedule.setHour(7);
//        bootSchedule.setMinute(0);
//        bootSchedule.setType(ScheduleType.DAILY);
//
//        shutdownSchedule = new ScheduleConfig();
//        shutdownSchedule.setEnabled(false);
//        shutdownSchedule.setHour(23);
//        shutdownSchedule.setMinute(0);
//        shutdownSchedule.setType(ScheduleType.DAILY);
//
//        saveConfig();
//    }
//
//    // 保存配置
//    private void saveConfig() {
//        try {
//            JSONObject configJson = new JSONObject();
//
//            // 保存开机配置
//            if (bootSchedule != null) {
//                JSONObject bootJson = new JSONObject();
//                bootJson.put("enabled", bootSchedule.isEnabled());
//                bootJson.put("hour", bootSchedule.getHour());
//                bootJson.put("minute", bootSchedule.getMinute());
//                bootJson.put("type", bootSchedule.getType().name());
//
//                if (bootSchedule.getType() == ScheduleType.WEEKLY) {
//                    JSONArray weekdaysArray = new JSONArray();
//                    for (boolean weekday : bootSchedule.getWeekdays()) {
//                        weekdaysArray.put(weekday);
//                    }
//                    bootJson.put("weekdays", weekdaysArray);
//                } else if (bootSchedule.getType() == ScheduleType.NETWORK) {
//                    bootJson.put("server", bootSchedule.getServer());
//                    bootJson.put("port", bootSchedule.getPort());
//                }
//
//                configJson.put("boot", bootJson);
//            }
//
//            // 保存关机配置
//            if (shutdownSchedule != null) {
//                JSONObject shutdownJson = new JSONObject();
//                shutdownJson.put("enabled", shutdownSchedule.isEnabled());
//                shutdownJson.put("hour", shutdownSchedule.getHour());
//                shutdownJson.put("minute", shutdownSchedule.getMinute());
//                shutdownJson.put("type", shutdownSchedule.getType().name());
//
//                if (shutdownSchedule.getType() == ScheduleType.WEEKLY) {
//                    JSONArray weekdaysArray = new JSONArray();
//                    for (boolean weekday : shutdownSchedule.getWeekdays()) {
//                        weekdaysArray.put(weekday);
//                    }
//                    shutdownJson.put("weekdays", weekdaysArray);
//                } else if (shutdownSchedule.getType() == ScheduleType.NETWORK) {
//                    shutdownJson.put("server", shutdownSchedule.getServer());
//                    shutdownJson.put("port", shutdownSchedule.getPort());
//                }
//
//                configJson.put("shutdown", shutdownJson);
//            }
//
//            // 写入文件
//            try (BufferedWriter writer = new BufferedWriter(new FileWriter(CONFIG_FILE))) {
//                writer.write(configJson.toString(2));
//                Log.i(TAG, "Config saved successfully");
//            }
//        } catch (IOException | JSONException e) {
//            Log.e(TAG, "Failed to save config: " + e.getMessage());
//        }
//    }
//
//    // 写入文件辅助方法
//    private void writeToFile(String filePath, String content) throws IOException {
//        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
//            writer.write(content);
//        }
//    }
//}